<?php

namespace PhpYes\Modules\Log\Example;


use PhpYes\Modules\Log\Backend\BackendSyslog;
use PhpYes\Modules\Log\LogRecordInterface;

class BackendSyslogPrefixTag extends BackendSyslog
{
    /**
     * 想要 syslog 根据 tag 过滤，阅读文档，支持的方式有:
     * $msg contains 'xxx'
     * $msg isequal 'xxx'
     * $msg startswith 'xxx'
     * $msg regex 'xxx'
     * $msg ereregex 'xxx'
     * 选择 $msg startswith 'xxx'，就要把 tag 拼接到 log msg 前面；
     * 继承 LogRecord 可以做到，但是 LogRecord 是 Logger 中所有 Backend 共有的，
     * 修改 LogRecord 将导致 Logger 中所有 Backend 都记下前面拼接了 tag 的 msg。
     * 所以还是继承 BackendSyslog 来重写 logRecord
     *
     * @param LogRecordInterface $logRecord
     */
    public function logRecord(LogRecordInterface $logRecord)
    {
        if (!self::$isOpenlog) {
            self::$isOpenlog = openlog(false, LOG_ODELAY, LOG_USER);
        }
        if (!self::$isOpenlog) {
            return;
        }

        $level = $logRecord->getLevel();
        $priority = isset(self::$logLevel2SyslogPriority[$level]) ? self::$logLevel2SyslogPriority[$level] : LOG_ERR;
        $tag = $logRecord->getTag();
        $tag = empty($tag) ? '' : trim($tag);
        syslog($priority, "<{$tag}>" . $logRecord->getLogMessage());
    }

}